package com.cskaoyan.javase.oop1._13block._1building;
/**
 * 代码块总的来说,属于不常见的语法,但是这个不常见是相对于static之类的关键字的.
 * 但是代码块有自身一些独特的场景
 * 比如构造代码块,它独特的使用场景有:
 *      1.复杂的成员变量赋值
 *      2.由于构造代码块最终会加入类的所有构造器
 *          "提取公因式"
 *          那么所有构造器都会执行的代码,要放入构造代码块
 *          避免代码冗余
 *
 *
 * @since 17:35
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            new Dog();
        }
        for (int i = 0; i < 2; i++) {
            new Dog(10);
        }

        System.out.println(Dog.count);

    }
}
class Dog{
    int num = 10;
    static int count = 0;

    {
        // 复杂的计算给num赋值时,可以用构造代码块
        // "提取公因式"
        count++;
    }

    public Dog() {
        // count++;
    }

    public Dog(int num) {
        this();
        this.num = num;
        // count++;
    }
}